In certain technical disciplines, such as engineering, instruments may be used to acquire and process data. For example, an engineer may be designing a system to minimize vehicle vibrations. The engineer may need to acquire and analyze vibration measurement data from sensors attached to a chassis of a vehicle in order to validate his design. For example, the engineer may capture data from the sensors using an instrument, such as a spectrum analyzer or oscilloscope. The engineer may wish to process this data in real-time using algorithms that will be run in the vibration canceling system installed in the vehicle, since the vibration canceling system will need to operate in real-time when canceling vibrations in an operational vehicle.
The engineer may ask a software developer to design vibration cancelling algorithms in software. The software developer may determine that algorithms should be written in a non-real-time high level language that runs on desktop computers since the high level language is more intuitive for the software developer to use than low level real-time languages (e.g., assembly code). For example, the developer may prefer to write code for the algorithms using a high level language like C, C++, or Java.
After the algorithms are written, the software developer may wish to test the debugged algorithms using continuous, or real-time, data to determine whether the algorithms will work in a real-time application running in the vehicle. For example, the software developer may know that processing real-time data may realistically identify how a deployed vibration canceling system will operate in the vehicle.
The software developer may be unable to process real-time data on the desktop computer because the computer may not support real-time processing. For example, an operating system (e.g., Windows) on the computer may only handle 32-bit information and real-time processing may require, for example, 64-bit information because of the large number of samples needed for real-time processing of vibration data.
The software developer may need to get help from the engineer to test his algorithms in a real-time environment because the instrument operated by the engineer may be the only device that can process real-time vibration data. The software developer may ask the engineer to encode the algorithms developed in the high level language into a real-time portion of the instrument so that real-time vibration data can be processed using the developed algorithms.
Porting the developed algorithms into a real-time format for use in the instrument may require that the engineer manually translate the algorithms from the high level language to a lower level language, such as a hardware description language (HDL), that runs in the real-time portion of the instrument. The engineer may need to hand code the HDL implementation of the algorithms into the instrument. The engineer may then need to debug the HDL algorithms before he can process real-time vibration data with the HDL algorithms.
This manual process of translating algorithms from high level, non-real-time environments into a format compatible with real-time instruments can be tedious, time consuming, require two or more people, and can be prone to error. As a result, developers and/or engineers may be disinclined to write algorithms for execution in an instrument.